
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h> // wait 函数的头文件

int main()
{
  pid_t ret = fork();
  if(ret < 0)
  {
    perror(" fork error ");
    return -1;
  }
  else if (ret == 0)
  {
    //子进程进入
    sleep(5);
    exit(66);
  }

  int exit_code;
  // 阻塞等待任意一个子进程退出  wait(&exit_code);
 //    int res =waitpid(-1,&exit_code,WNOHANG);
 
  int res;
  while((res = waitpid(-1,&exit_code,WNOHANG)) == 0)  //设置为非阻塞，一定要循环操作
  {
    printf("还有一个小时，我去上一把号\n");
    sleep(1);
  }
 
  if(res>0)
  {
    if((exit_code & 0x7f)== 0)   // 看进程是不是异常退出，是0就是正常退出
    {
      printf("pid:%d exited!  |   exit code:%d\n",res,0xff & (exit_code >> 8));
    }
    else // 非0，此时异常退出（可以在程序睡眠10秒之前，杀死子进程看这个语句实现）
    {
        printf("game Abnormal termination!\n");
    }
  }
  else if (res == 0)
  {
    printf("have no games!\n");
  }
  else{
    perror("wait error");
  }

  while(1)
  {
    sleep(1);
    printf("gaming -------\n");
  }
  return 0;

}
